/**
 * 创建(cj)一个属性(SX)
 * @参数 {文本} ming 属性名
 * @参数 {文本} zhi 属性值
 * 
 * @返回 {对象} 节点的【属性对象】
 */
NW02_jd.prototype.cjSX = function (ming, zhi) {
    let _SX = document.createAttribute(ming); //创建一个新的属性
    if (zhi) { //设置属性值
        _SX.value = zhi;
    }
    this.Jiedian.setAttributeNode(_SX); //加入属性到节点里
    return _SX; //返回属性对象。
}

/**
 * 移除一个或多个属性
 * 多个属性时，请以 [逗号] 或 [分号] 隔开属性。
 * 示例：
 * "属性1,属性2,属性3...................属性N"    逗号隔开
 * "属性1;属性2;属性3...................属性N"    分号隔开
 * 
 * @参数 {文本} keys 属性名列表 或单个 属性名
 */
NW02_jd.prototype.scSX = function (sxLB) {
    if (sxLB && this.wgj.pdWenben(sxLB)) { //只对真值处理，并且，是字符串的属性
        //表示有多个属性要一起删除
        if (sxLB.indexOf(',') != -1 || sxLB.indexOf(';') != -1) {
            let cvs = sxLB.split(/[;, ]{1}/); //切割
            let _ming;
            for (let j = 0; j < cvs.length; j++) {
                _ming = this.wgj.scKong(cvs[j]); //对【切割1】出来的每一个节点,去两头空
                if (_ming) { //是真值时,才会进入下一步。
                    this.Jiedian.removeAttribute(_ming);
                }
            }
        } else {
            this.Jiedian.removeAttribute(sxLB);
        }
    }
}


/**
 * 修改属性（批量）
 * 
 * 接收的格式有：
 *   第1种：对象型。示例： {a:'值',b:'值1'}
 *   第2种：字符串型："id=abc;bc:aa,dd=123"
 * 
 * 备注：
 *  注意第2种，
 *      有两种写法，id=abc 和 bc:aa  。即，无论是=号还是：号，都可以被框架识别。
 *      另外，支持;号或,号分隔 属性
 * 
 * @参数 {object|string} SXlb 属性列表|属性名
 * @参数 {文本} zhi 属性值
 */
NW02_jd.prototype.xgSX = function (SXlb, zhi) {
    if (!SXlb) { //不用理会假值
        return;
    }
    //第二种方式 设置属性
    if (this.wgj.pdWenben(SXlb)) {
        //表示多个属性，一起修改
        if (SXlb.indexOf('=') != -1 || SXlb.indexOf(':') != -1) {
            //切割用户传入的参数
            //切割1：从"a=b;c=d,f:a"这种格式，分离出来 a=b，c=d......;
            //切割2：再从a=b 分析  a，b ...........
            let _QGs = SXlb.split(/[;,]{1}/); //切割1
            let cvs2; //用来暂存【切割2】
            for (let j = 0; j < _QGs.length; j++) {

                _QGs[j] = this.wgj.scKong(_QGs[j]); //对【切割1】出来的每一个节点,去两头空
                if (_QGs[j]) { //是真值时,才会进入【切割2】步骤。
                    cvs2 = _QGs[j].split(/[:=]{1}/); //【切割2】
                    //拆分键值对，必须得到两个节点。即,长度一定是2
                    if (cvs2.length == 2) {
                        this._ngj_xgSX(this.wgj.scKong(cvs2[0]), cvs2[1]); ////设置属性
                    }
                }
            }
        }
        //表示修改单个属性
        else {
            // console.log('-----------------------------------------' + SXlb + '=' + zhi)
            this._ngj_xgSX(SXlb, zhi);
        }
    }

    //第一种方式 设置属性
    if (this.wgj.pdD(SXlb)) {
        let tempKey;
        for (let key in SXlb) {
            tempKey = this.wgj.scKong(key);
            this._ngj_xgSX(tempKey, SXlb[tempKey]); ////设置属性
        }
        return; //处理完即结束。不用理会其他的方式
    }

}

/**
 * 获取 一个属性
 * @参数 {文本} ming 属性名
 * @返回 {对象} 节点的【属性对象】
 */
NW02_jd.prototype.hqSX = function (ming) {
    return this.Jiedian.getAttributeNode(ming);
}

NW02_jd.prototype.hqSXzhi = function (ming) {
    let _SX = this.wgj.pdWenben(ming) ? this.hqSX(ming) : ming;
    return _SX ? _SX.value : null;
}

/**
 * 
 * 获取 本属性及其下游节点的所有属性
 * 
 * @参数 {数组} SXJiedianS 缓存 有模板符号的 属性.如果为null，方法会自动创建一个数组。
 */
NW02_jd.prototype.hqMBsxM = function (SXJiedianS) {
    // nw.JK.hqJiedian_sxS(this.Jiedian, SXJiedianS)
    let _JG = SXJiedianS ? SXJiedianS : [];
    this.wgj.hqMBsxM(this.Jiedian, _JG);
    return _JG;
}


//========================================内工具========================================

//内工具：修改单个属性
NW02_jd.prototype._ngj_xgSX = function (ming, zhi) {
    if (null == zhi) {
        this.scSX(ming);
        return;
    }
    let _SX = this.hqSX(ming);
    if (_SX) {
        _SX.value = zhi;
    } else {
        this.cjSX(ming, zhi)
    }
}
